package com.github.common.extend.demo.config.filetask;

/**
 * 文件任务异步回调
 * @author wangjj7
 * @date 2023/8/11
 * @description
 */
public interface FileTaskCallback {

    /**
     * 导出任务执行前
     * @param taskSubmitDTO
     */
    void preExe(FileTaskParam taskSubmitDTO);

    /**
     * 导出任务执行后
     * @param fileTask
     * @param e 任务执行中抛的异常，如果没有报错则传null
     */
    void postExe(FileTask fileTask, Exception e);

    static FileTaskCallback of(FileTaskCallback... fileTaskCallbacks)
    {
        return new FileTaskCallback() {
            @Override
            public void preExe(FileTaskParam taskSubmitDTO) {
                for (FileTaskCallback fileTaskCallback : fileTaskCallbacks) {
                    if (fileTaskCallback != null) {
                        fileTaskCallback.preExe(taskSubmitDTO);
                    }
                }
            }

            @Override
            public void postExe(FileTask fileTask, Exception e) {
                for (FileTaskCallback fileTaskCallback : fileTaskCallbacks) {
                    if (fileTaskCallback != null) {
                        fileTaskCallback.postExe(fileTask ,e);
                    }
                }
            }
        };
    }

    default FileTaskCallback before(FileTaskCallback preFileTaskCallback)
    {
        if (preFileTaskCallback == null){
            return this;
        }
        return of(preFileTaskCallback ,this);
    }

    default FileTaskCallback then(FileTaskCallback postFileTaskCallback)
    {
        if (postFileTaskCallback == null){
            return this;
        }
        return of(this ,postFileTaskCallback);
    }

}
